package com.jz.netthings.analysis.utils;

import com.jz.netthings.utils.AdscmBaseUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

public class AnalysisUtils {

    static Logger logger = LoggerFactory.getLogger(AnalysisUtils.class);


    static String[] address = new String[]{
            "甘肃省甘南藏族自治州迭部县腊子口乡腊子行政村铁池自然村14号",
            "甘肃省甘南藏族自治州迭部县腊子口乡朱立行政村朱立自然村77号",
            "甘肃省甘南藏族自治州迭部县电杂镇兴迭东街453号",
            "甘肃省甘南藏族自治州舟曲县巴藏乡下巴藏行政村",
            "甘肃省甘南藏族自治州卓尼县纳浪乡西尼沟村西尼沟自然村6号",
            "甘肃省甘南藏族自治州卓尼县纳浪乡西尼沟村西尼沟自然村276号",
            "甘肃省甘南藏族自治州卓尼县纳浪乡大小板子村小板子自然村46号",
            "重庆市城口县修齐镇白果村6组42号",
            "成都市青羊区双顺路４号４栋２单元１２号",
            "成都市青羊区双顺路４号４栋２单元１２号",
//            "重庆市城口县修齐镇白果村6组42号",
//            "重庆市城口县修齐镇白果村6组42号",
//            "甘肃省定西地区岷县西寨镇坎峰村348号",
//            "甘肃省定西地区岷县岷阳镇龙潭村三社219号",
//            "甘肃省岷县禾驮乡哈地哈村90号",
//            "甘肃省岷县梅川镇文斗村163号",
//            "甘肃省岷县茶埠镇炭山村175号",
//            "甘肃省定西地区岷县西寨镇坎峰村421号",
//            "甘肃省定西地区岷县清水乡大沙漠村1号",
//            "甘肃省岷县梅川镇车路村15号",
//            "甘肃省定西地区岷县闾井镇大庄村72号",
//            "甘肃省岷县禾驮乡安家山村5号",
//            "甘肃省岷县梅川镇永光村154号",
//            "甘肃省岷县中寨镇大哈村244号",
//            "甘肃省岷县梅川镇杏林村173号",
//            "甘肃省定西地区岷县西寨镇坎峰村447号",
//            "甘肃省定西地区岷县梅川镇永光村202号",
//            "甘肃省定西地区岷县梅川镇永光村23号",
//            "甘肃省岷县禾驮乡拉路村76号",
//            "甘肃省岷县禾驮乡乔家沟村四社",
//            "甘肃省岷县岷阳镇池那湾村四社122号",
//            "甘肃省定西地区岷县梅川镇永光村37号",
//            "甘肃省岷县禾驮乡乔家沟村20号",
//            "甘肃省岷县茶埠镇炭山村201号",
//            "甘肃省定西地区岷县西寨镇坎峰村254号",
            "甘肃省岷县梅川镇辘辘村150号",
            "甘肃省定西地区岷县西寨镇田家堡村185号",
            "甘肃省岷县梅川镇车路村243号",
            "甘肃省定西地区岷县西寨镇坎峰村199号",
            "甘肃省定西地区岷县西寨镇坎峰村442号",
            "甘肃省岷县茶埠镇沟门村339号",
            "甘肃省岷县清水乡板达口村207号",
            "甘肃省定西地区岷县寺沟乡坞麻沟村79号",
            "甘肃省定西地区岷县寺沟乡坞麻沟村96号",
            "甘肃省岷县茶埠镇炭山村186号",
            "甘肃省岷县禾驮乡禾驮村四社",
            "甘肃省岷县梅川镇永星村56号",
            "甘肃省定西地区岷县马坞乡上玖庄村109号",
//            "甘肃省岷县禾驮乡哈地哈村10号",
//            "甘肃省岷县禾驮乡禾驮村561号",
//            "甘肃省岷县闾井镇大庄村63号",
//            "甘肃省定西地区岷县马坞乡上玖庄村123号",
//            "甘肃省定西地区岷县马坞乡上玖庄村171号",
//            "甘肃省岷县茶埠镇耳阳村204号",
//            "甘肃省岷县梅川镇马场村123号",
//            "甘肃省定西地区岷县马坞乡上玖庄村88号",
//            "甘肃省定西地区岷县清水乡大沙漠村80号",
//            "甘肃省岷县禾驮乡立哈村163号",
//            "甘肃省定西地区岷县清水乡大沙漠村85号",
//            "甘肃省定西地区岷县清水乡大沙漠村46号",
//            "甘肃省定西地区岷县清水乡大沙漠村80号",
//            "甘肃省定西地区岷县清水乡大沙漠村1号",
//            "甘肃省定西地区岷县清水乡大沙漠村1号",
//            "甘肃省定西地区岷县清水乡大沙漠村85号",
//            "甘肃省定西地区岷县清水乡大沙漠村4号",
//            "甘肃省定西地区岷县西寨镇坎峰村399号",
//            "甘肃省定西地区岷县十里镇的古录村二社211号",
//            "甘肃省定西地区岷县寺沟乡白土坡村100号",
//            "甘肃省定西地区岷县寺沟乡白土坡村283号",
//            "甘肃省岷县中寨镇古庄村62号",
//            "甘肃省定西地区岷县寺沟乡白土坡村290号",
//            "甘肃省定西地区岷县寺沟乡白土坡村五社174号",
//            "甘肃省定西地区岷县寺沟乡白土坡村290号",
//            "甘肃省定西地区岷县寺沟乡白土坡村112号",
//            "甘肃省定西地区岷县寺沟乡白土坡村236号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村233号",
//            "甘肃省岷县梅川镇永星村56号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村159号",
//            "甘肃省岷县禾驮乡拉路村95号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村163号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村41号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村228号",
//            "甘肃省岷县蒲麻镇砖塔寨村352号",
//            "甘肃省定西地区岷县寺沟乡白土坡村244号",
//            "甘肃省定西地区岷县寺沟乡纸坊村469号",
//            "甘肃省定西地区岷县寺沟乡白土坡村331号",
//            "甘肃省定西地区岷县寺沟乡白土坡村244号",
//            "甘肃省岷县梅川镇茶固村225号",
//            "甘肃省岷县梅川镇茶固村352号",
//            "甘肃省岷县梅川镇茶固村164号",
//            "甘肃省岷县梅川镇老幼店村143号",
//            "甘肃省梅川镇茶固村188号",
//            "甘肃省岷县十里镇北小路村二社",
//            "甘肃省岷县梅川镇车路村259号",
//            "甘肃省定西地区岷县中寨村180号",
//            "甘肃省定西地区岷县梅川镇永光村9号",
//            "甘肃省定西地区岷县西江镇瓦场村188号",
//            "甘肃省定西地区岷县岷阳镇教场街73号",
//            "甘肃省定西地区岷县岷阳镇教场街73号",
//            "甘肃省定西地区岷县十里镇齐家村118号",
//            "甘肃省定西地区岷县岷阳镇池那湾村四社110号",
//            "甘肃省定西地区岷县禾驮乡拉路村30号",
//            "甘肃省定西地区岷县禾驮乡石门村53号",
//            "甘肃省定西地区岷县茶埠镇尹家村190号",
//            "甘肃省定西地区岷县禾驮乡随固村286号",
//            "甘肃省定西地区岷县十里镇南小路村五社228号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村391号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村391号",
//            "甘肃省定西地区岷县中寨镇古庄村55号",
//            "甘肃省定西地区岷县中寨镇古庄村52号",
//            "甘肃省定西地区岷县中寨镇古庄村64号",
//            "甘肃省定西地区岷县中寨镇古庄村64号",
//            "甘肃省定西地区岷县十里镇北小路村四社205号",
//            "甘肃省定西地区岷县秦许乡中堡村三社",
//            "甘肃省定西地区岷县西寨镇坎峰村173号",
//            "甘肃省定西地区岷县西寨镇坎峰村347号",
//            "甘肃省岷县禾驮乡山沟村12号",
//            "甘肃省定西地区岷县蒲麻镇元草村245号",
//            "甘肃省定西地区岷县蒲麻镇元草村159号",
//            "甘肃省定西地区岷县蒲麻镇元草村97号",
//            "甘肃省定西地区岷县蒲麻镇元草村204号",
//            "甘肃省定西地区岷县十里镇小龙村二社111号",
//            "甘肃省岷县禾驮乡立哈村14号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村336号",
//            "甘肃省定西地区岷县蒲麻镇元草村68号",
//            "甘肃省定西地区岷县蒲麻镇元草村35号",
//            "甘肃省定西地区岷县西寨镇坎峰村143号",
//            "甘肃省定西地区岷县西寨镇坎峰村67号",
//            "甘肃省定西地区岷县寺沟乡白土坡村189号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村51号",
//            "甘肃省定西地区岷县蒲麻镇砖塔寨村222号",
//            "甘肃省定西地区岷县寺沟乡白土坡村15号",
//            "甘肃省定西地区岷县寺沟乡白土坡村10号",
//            "甘肃省定西地区岷县十里镇龙峰村130号",
//            "甘肃省定西地区岷县清水乡小湾村137号",
//            "甘肃省定西地区岷县岷阳镇长虹村372号",
//            "甘肃省岷县茶埠镇甫里村92号",
//            "甘肃省定西地区岷县秦许乡中堡村58号",
//            "甘肃省定西地区岷县中寨镇古庄村68号",
//            "甘肃省定西地区岷县岷阳镇新花街62号",
//            "甘肃省定西地区岷县蒲麻镇元草村17号",
//            "甘肃省岷县梅川镇他路村232号",
//            "甘肃省定西地区岷县蒲麻镇元草村159号",
//            "甘肃省定西地区岷县梅川镇车路村216号",
//            "甘肃省定西地区岷县十里镇南小路村二社93号",
//            "甘肃省定西地区岷县中寨镇同兴村57号",
//            "甘肃省定西地区岷县梅川镇茶固村54号",
//            "甘肃省定西地区岷县梅川镇西坝村341号",
//            "甘肃省定西地区岷县锁龙乡锁龙村一社",
//            "甘肃省定西地区岷县蒲麻镇吊沟村268号",
//            "甘肃省定西地区岷县岷阳镇远路14号",
//            "甘肃省定西地区岷县民阳镇苗泉新村82号",
//            "甘肃省定西地区岷县十里镇南小路村七社399号",
//            "甘肃省定西地区岷县寺沟乡纸坊村258号",
//            "甘肃省定西地区岷县寺沟乡白土坡村284号",
//            "甘肃省岷县西寨镇坎峰村51号",
//            "甘肃省岷县岷阳镇住南川村16号",
//            "甘肃省岷县梅川镇他路村92号",
//            "甘肃省岷县梅川镇他路村50号",
//            "甘肃省岷县十里镇张家坪村六社471号",
//            "甘肃省岷县十里镇张家坪村三社159号",
//            "甘肃省岷县蒲麻镇砖塔寨村81",
//            "甘肃省岷县梅川镇茶固村76号",
//            "甘肃省岷县梅川镇永星村173号",
            "宁夏回族自治区吴忠市青铜峡市艾山街224号"
    };



    public static void main(String[] args) {
//        for (String add : address) {
//            List<String> result = splitAddress(add);
//            System.out.println(add + "【"+result+"】");
//        }

//        List<String> splitAddress = AnalysisUtils.splitAddress("宁夏回族自治区吴忠市青铜峡市艾山街224号");
//        StringBuffer str = new StringBuffer();
//        if (splitAddress != null && splitAddress.size()>0){
//            for (String address : splitAddress) {
//                str.append(address + "·");
//            }
//        }
//        System.out.println(str.substring(0,str.length()-1));

        System.out.println(addAddressBetweenStr("甘肃省·岷县·中寨镇·古城村","甘肃省","岷县","定西市"));
    }

    /**
     *
     * 给指定地址的指定前后字符串中间，添加一个地址字符串
     * 前缀和后缀间不能存在其他地址字符串，· 除外
     * @param baseAddress 源地址
     * @param prefix 前缀
     * @param sufix 后缀
     * @param targetStr 目标字符串
     * @return
     */
    public static String addAddressBetweenStr(String baseAddress,String prefix,String sufix,String targetStr){
        String dz = null;
        if (AdscmBaseUtils.getInstance().isNotEmpty(baseAddress,null)){
            String[] split = baseAddress.split("·");
            StringBuffer sb = new StringBuffer();
            for (int i=0;split != null && i<split.length;i++) {
                sb.append(split[i]+"·");
                if (split[i].equals(prefix)){
                    if(split[i+1].equals(sufix)){
                        sb.append(targetStr+"·");
                    }else{
                        logger.warn("前缀和后缀间存在其他地址字符串，不能添加");
                    }
                }
            }
            if (sb.length()>0){
                dz = sb.substring(0,sb.length()-1);
            }
        }
        return dz;
    }

    /**
     * 截取地址
     *
     * @param address
     * @return
     */
    public static List<String> splitAddress(String address) {
        int sheng = address.indexOf("省");
        int zzq = address.indexOf("自治区");
        int shi = address.indexOf("市");
        int idxS = address.indexOf("市", shi+1);
        int diqu = address.indexOf("地区");
        int zzz = address.indexOf("自治州");
        int xian = address.indexOf("县");
        int zhen = address.indexOf("镇");
        int xiang = address.indexOf("乡");
        int cun = address.indexOf("村");
        int zrcun = address.indexOf("自然村");
        int jie = address.indexOf("街");
        int xiangzi = address.indexOf("巷");

        int qu = -1;
        if(diqu > 0){
            qu = address.indexOf("区",diqu + 2);
        }else if(zzq > 0){
            qu = address.indexOf("区",zzq + 3);
        }else{
            qu = address.indexOf("区");
        }

        String sheng_ = "";
        String zzq_ = "";
        String diqu_ = "";
        String zzz_ = "";
        String qu_ = "";
        List<String> shi_ = new ArrayList<>();
        String xian_ = "";
        String zhen_ = "";
        String xiang_ = "";
        String cun_ = "";
        String zrcun_ = "";
        String jie_ = "";
        String xiangzi_ = "";

        try {
            if (zrcun > 0) {
                if (cun > 0) {
                    zrcun_ = address.substring(cun + 1, zrcun + 3);
                }
            }

        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (cun > 0) {
                //有村，就用乡/镇来截取是什么村
                if (zhen > 0) {
                    cun_ = address.substring(zhen + 1, cun + 1);
                } else if (xiang > 0) {
                    cun_ = address.substring(xiang + 1, cun + 1);
                } else if (xian > 0) {
                    cun_ = address.substring(xian + 1, cun + 1);
                } else if (shi > 0) {
                    cun_ = address.substring(shi + 1, cun + 1);
                } else if (sheng > 0) {
                    cun_ = address.substring(sheng + 1, cun + 1);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (jie > 0) {
                if (zhen > 0) {
                    jie_ = address.substring(zhen + 1, jie + 1);
                } else if (xiang > 0) {
                    jie_ = address.substring(xiang + 1, jie + 1);
                } else if (xian > 0) {
                    jie_ = address.substring(xian + 1, jie + 1);
                } else if (idxS > 0) {
                    jie_ = address.substring(idxS + 1, jie + 1);
                } else if (shi > 0) {
                    jie_ = address.substring(shi + 1, jie + 1);
                } else if (sheng > 0) {
                    jie_ = address.substring(sheng + 1, jie + 1);
                }


            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }

        try {
            if (xiangzi > 0) {
                if (zhen > 0) {
                    xiangzi_ = address.substring(zhen + 1, xiangzi + 1);
                } else if (xiang > 0) {
                    xiangzi_ = address.substring(xiang + 1, xiangzi + 1);
                } else if (xian > 0) {
                    xiangzi_ = address.substring(xian + 1, xiangzi + 1);
                } else if (idxS > 0) {
                    xiangzi_ = address.substring(idxS + 1, xiangzi + 1);
                } else if (shi > 0) {
                    xiangzi_ = address.substring(shi + 1, xiangzi + 1);
                } else if (sheng > 0) {
                    xiangzi_ = address.substring(sheng + 1, xiangzi + 1);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (xiang > 0) {
                if (xian > 0) {
                    xiang_ = address.substring(xian + 1, xiang + 1);
                }  else if (idxS > 0) {
                    xiang_ = address.substring(idxS + 1, xiang + 1);
                } else if (shi > 0) {
                    xiang_ = address.substring(shi + 1, xiang + 1);
                }else if (sheng > 0) {
                    xiang_ = address.substring(sheng + 1, xiang + 1);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (zhen > 0) {
                if (xian > 0) {
                    zhen_ = address.substring(xian + 1, zhen + 1);
                }  else if (idxS > 0) {
                    zhen_ = address.substring(idxS + 1, zhen + 1);
                } else if (shi > 0) {
                    zhen_ = address.substring(shi + 1, zhen + 1);
                } else if (sheng > 0) {
                    zhen_ = address.substring(sheng + 1, zhen + 1);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (xian > 0) {
                if (idxS > 0) {
                    xian_ = address.substring(idxS + 1, xian + 1);
                }else if (shi > 0) {
                    xian_ = address.substring(shi + 1, xian + 1);
                } else if (diqu > 0) {
                    xian_ = address.substring(diqu + 2, xian + 1);
                } else if (zzz > 0) {
                    xian_ = address.substring(zzz + 3, xian + 1);
                } else if (sheng > 0) {
                    xian_ = address.substring(sheng + 1, xian + 1);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (qu > 0) {
                if (idxS > 0) {
                    qu_ = address.substring(idxS + 1, qu + 1);
                }else if (shi > 0) {
                    qu_ = address.substring(shi + 1, qu + 1);
                } else if (diqu > 0) {
                    qu_ = address.substring(diqu + 2, qu + 1);
                } else if (zzz > 0) {
                    qu_ = address.substring(zzz + 3, qu + 1);
                } else if (sheng > 0) {
                    qu_ = address.substring(sheng + 1, qu + 1);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (shi > 0) {
                if (sheng > 0) {
                    shi_.add(address.substring(sheng + 1, shi + 1));
                }else if(zzq > 0){
                    shi_.add(address.substring(zzq + 3, shi + 1));
                }else{
                    shi_.add(address.substring(0, shi + 1));
                }
                if(idxS > 0){
                    shi_.add(address.substring(shi + 1, idxS + 1));
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (diqu > 0) {
                if (sheng > 0) {
                    diqu_ = address.substring(sheng + 1, diqu) + "市";
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (zzz > 0) {
                if (sheng > 0) {
                    zzz_ = address.substring(sheng + 1, zzz + 3);
                }
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (sheng > 0) {
                sheng_ = address.substring(0, sheng + 1);
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }
        try {
            if (zzq > 0) {
                zzq_ = address.substring(0, zzq + 3);
            }
        } catch (Exception e) {
            logger.error("截取地址【" + address + "】时出错：" + e);
        }

        List<String> addList = new ArrayList<String>();
        if (!"".equals(sheng_)) {
            addList.add(addList.size(), sheng_);
        }
        if (!"".equals(zzq_)) {
            addList.add(addList.size(), zzq_);
        }
        if (!"".equals(shi_)) {
            for(String shis : shi_){
                addList.add(addList.size(), shis);
            }
        }
        if (!"".equals(diqu_)) {
            addList.add(addList.size(), diqu_);
        }
        if (!"".equals(zzz_)) {
            addList.add(addList.size(), zzz_);
        }
        if (!"".equals(xian_)) {
            addList.add(addList.size(), xian_);
        }
        if (!"".equals(qu_)) {
            addList.add(addList.size(), qu_);
        }
        if (!"".equals(zhen_)) {
            addList.add(addList.size(), zhen_);
        }
        if (!"".equals(xiang_)) {
            addList.add(addList.size(), xiang_);
        }
        if (!"".equals(cun_)) {
            addList.add(addList.size(), cun_);
        }
        if (!"".equals(zrcun_)) {
            addList.add(addList.size(), zrcun_);
        }
        if (!"".equals(jie_)) {
            addList.add(addList.size(), jie_);
        }
        if (!"".equals(xiangzi_)) {
            addList.add(addList.size(), xiangzi_);
        }

        return addList;
    }


}
